package com.androidhelper.module.common.http.interceptor;


import com.androidhelper.module.common.app.LibApplication;
import com.androidhelper.module.common.utils.LogUtils;
import com.androidhelper.module.common.utils.NetworkUtil;

import java.io.IOException;

import okhttp3.CacheControl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
 * @author chenxz
 * @date 2018/8/21
 * @desc CacheInterceptor
 * 在无网络的情况下读取缓存，有网络的情况下根据缓存的过期时间重新请求
 */
public class CacheInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {

//        CacheControl.Builder cacheBuilder = new CacheControl.Builder();
//        cacheBuilder.maxAge(0, TimeUnit.SECONDS);
//        cacheBuilder.maxStale(365, TimeUnit.DAYS);
//        CacheControl cacheControl = cacheBuilder.build();


        Request request = chain.request();

         if(NetworkUtil.isConnected(LibApplication.getInstance())){
             //有网络时只从网络获取数据
             request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build(); //TODO 待确定

         }else{
             //如果没有网络时  使用缓存
             request = request.newBuilder()
                     .cacheControl(CacheControl.FORCE_CACHE) //无网络下强制使用缓存，无论缓存是否过期,此时该请求实际上不会被发送出去。
                     //.removeHeader("Pragma")  //TODO 待确定
                    // .header("Cache-Control", "only-if-cached,max-stale=" + 30 * 24 * 60 * 60)  //TODO 待确定
                     .build();

             LogUtils.d( "no network use htttp cache");
         }








        Response response = chain.proceed(request);
        if (NetworkUtil.isConnected(LibApplication.getInstance())) {
            //如果有网络  不缓存, 最大保存时长为0
            int maxAge = 0;
             response.newBuilder()
                    .removeHeader("Pragma")// 清除头信息，因为服务器如果不支持，会返回一些干扰信息，不清除下面无法生效
                     .header("Cache-Control", "public, max-age=" + maxAge)
                   // .header("Cache-Control",  request.cacheControl().toString())
                     .build();
        } else {
            // 无网络时，设置超时为2周
            long maxStale = 60 * 60 * 24;
            response.newBuilder()
                    .removeHeader("Pragma")
                    .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                    .build();
        }
        return response;
    }
}
